Distributed transactions are often performed on distributed computing systems. A distributed transaction is a set of operations that update shared objects. Distributed transactions should satisfy the properties of Atomicity, Consistency, Isolation and Durability, known commonly as the ACID properties. According to the Atomicity property, either the transaction successfully executes to completion, and the effects of all operations are recorded, or the transaction fails. The Consistency property ensures that the transaction does not violate integrity constraints of the shared objects. The Isolation property ensures that intermediate effects of the transaction are not detectable to concurrent transactions. Finally, the Durability property ensures that changes to shared objects due to the transaction are permanent.
To ensure the Atomicity property, all participants of the distributed transaction coordinate their actions so that they either unanimously abort or unanimously commit to the transaction. A two-phase commit protocol is commonly used to ensure Atomicity. Under the two-phase commit protocol, the distributed system performs the commit operation in two phases. In the first phase, commonly known as the prepare phase or request phase, a coordinator (a node in the distributed computing system managing the transaction) asks all participants (nodes in the distributed computing system participating in the transaction) whether they are able to commit to the transaction. During the second phase, commonly known as the commit phase, the coordinator node determines whether the transaction should be completed. If during the prepare phase all participant nodes committed to the transaction, the coordinator node successfully completes the transaction and sends commit messages to each of the participants. If during the prepare phase one or more participant nodes failed to commit to the transaction, the coordinator node does not complete the transaction and sends roll back message to each of the participants.